package lion.framework.core.web.path;

import java.util.Comparator;

import org.apache.commons.lang.StringUtils;

/**
 * 路径节点比较
 * <p>
 * 当一个路径存在包含关系时，如路径\a\b\{param} 和\a\b\{param:int}同时存在，那么如果路径\a\b\1请求将优先匹配\a\b\1
 * <br/>
 * 限定条件越多，那么匹配将越靠前
 * 
 * @author lion
 * @email hl_0074@sina.com
 * @date 2015年11月19日
 */
public class PathNodeComparator implements Comparator<String> {

	@Override
	public int compare(String pathPatterA, String pathPatterB) {

		if (StringUtils.equals(pathPatterA, pathPatterB)) { return 0; }

		// 比较参数多少,参数多的靠前
		int a = StringUtils.countMatches(pathPatterA, "{");
		int b = StringUtils.countMatches(pathPatterB, "{");
		if (a > b) {
			return 1;
		} else if (a < b) { return -1; }

		// 如果有限定参数，则限定参数靠前
		a = StringUtils.countMatches(pathPatterA, ":");
		b = StringUtils.countMatches(pathPatterB, ":");
		if (a > b) {
			return 1;
		} else if (a < b) { return -1; }

		return -pathPatterA.compareTo(pathPatterB);
	}

}
